假设要做一个垃圾邮件过滤器,选定了100个单词用作特征,并应用贝叶斯逻辑回归算法,通过梯度下降来求解最优参数。最终在测试集上测试,得到了20%的测试误差。这个误差非常高,接下来要改进这个算法,该如何入手?
贝叶斯逻辑回归算法的优化目标为 $\max_{\theta}\sum_{i=1}^m log p(y^{(i)}|x^{(i)},\theta) - \lambda||\theta||^2$
常见的策略如下:
当然你可以每个策略依次进行十分耗时的尝试,但更好地方法是,优先诊断当前模型面临的问题。
过拟合 vs 欠拟合
观察训练误差和测试误差相对于训练集数量 $m$ 的趋势。
过拟合/高方差:训练误差远小于测试误差。随着样本数 $m$ 的上升,测试误差依然呈现下降趋势。
欠拟合/高偏差:训练误差和测试误差比较接近,但相比于基准都很大。
优化算法问题
例一:贝叶斯逻辑回归对于垃圾邮件有2%的误差,对非垃圾邮件也有2%的误差(对于非垃圾邮件误差过高);线性核SVM对垃圾邮件有10%的误差,对非垃圾邮件有0.1%的误差(可以接受的误差范围)。但出于性能考虑,更希望使用逻辑回归。
例二:使用梯度下降的逻辑回归是否已经收敛?可以绘制目标函数 $J(\theta)$ 相对于迭代次数的折线图。但即使如此,有时也很难确定。可能随着迭代次数,目标函数依然在缓慢变化。
例三:是否使用了正确的目标函数,也许对垃圾邮件和非垃圾邮件的错误率,有不同的容忍度。比如可能希望最大化 $a(\theta)=\sum_i w^{(i)}1\{h_\theta(x^{(i)})=y^{(i)}\}$。设想训练出的结果,$a(\theta_{SVM})>a(\theta_{LR})$,但是由于模型的优化目标依然是 $J$,考虑下面两种情况:
In [ ]: